# -*- coding: utf-8 -*-

from django.db import models

from django.contrib.auth.models import User, Group, UserManager

UNIDADES_MEDIDA = (
    (1, 'Unid.'),
    (2, 'Kg'),
    (3, 'lit.'),
)

ESTADO = (
    (0, 'Item excluído'),
    (1, 'Item ativo'),
    (2, 'Item processado'),
)

class Caixa(models.Model):
    class Meta:
        verbose_name = 'Caixa'
        verbose_name_plural = 'Caixas'
    
    estabelecimento = models.ForeignKey('configuracao.Estabelecimento') # Contém dados do estabelecimento
    usuario = models.ForeignKey(User) # 
    nome = models.CharField(u'Nome do caixa', max_length = 50)
    impressora = models.ForeignKey('impressao.Impressora', null = True, blank = True, default = None)
    
    def __unicode__(self):
        return self.nome

class UsuarioPerfil(models.Model):
    class Meta:
        verbose_name = 'Dados do Usuário'
        verbose_name_plural = 'Dados do Usuário'
    
    usuario = models.OneToOneField(User)
    rg = models.CharField(u'RG', max_length=30, blank=True, null=True)
    cpf = models.CharField(u'CPF', max_length=11, blank=True, null=True)

class Endereco(models.Model):
    class Meta:
        verbose_name = 'Endereço'
        verbose_name_plural = 'Endereços'
    
    rua = models.CharField(u'Rua', max_length=100, null=True, blank=True)
    cidade = models.CharField(u'Cidade', max_length=50, blank=True, null=True)
    referencia = models.CharField(u'Ponto de Referência', max_length=50, blank=True, null=True)
    cep = models.CharField(u'CEP', max_length=8, blank=True, null=True)
    usuario = models.ForeignKey(User)

    def __unicode__(self):
        return self.rua + '. Ref.: ' + self.referencia + '. CEP: ' + self.cep + '. ' + self.cidade

class Telefone(models.Model):
    class Meta:
        verbose_name = 'Telefone'
        verbose_name_plural = 'Telefones'
        
    ddd = models.CharField(u'DDD', max_length=3, blank = True, null = True)
    numero = models.CharField(u'Número do Telefone', max_length=12)
    operadora = models.CharField(u'Operadora', max_length=20, blank=True, null=True, choices = (('Tim', 'Tim'), ('Claro', 'Claro'), ('Oi', 'Oi'), ('Vivo', 'Vivo'), ('Fixo', 'Fixo')))
    usuario = models.ForeignKey(User)  

    def __unicode__(self):
        self.numero = '(' + self.ddd + ') ' + self.numero
        
        if self.operadora:
            return self.numero + ' - Op.: ' + self.operadora
        else:
            return self.numero
    
    def save(self, *args, **kwargs):
        import string
        for i in string.letters + string.punctuation + ' ':
            self.numero = self.numero.replace(i, '')
        
        super(Telefone, self).save(*args, **kwargs)
    
class Produto(models.Model):
    nome = models.CharField(u'Descrição',max_length=50)
    nome_impressao = models.CharField(u'Descrição para impressão', max_length=30)
    preco_venda  = models.DecimalField(u'Preço de Venda', max_digits=10, decimal_places=2)
    preco_compra = models.DecimalField(u'Preço de Compra',blank=True, null=True, max_digits=10, decimal_places=2)
    codigo = models.CharField(u'Código', max_length=50, unique=True)
    quantidade = models.DecimalField(u'Quantidade em Estoque', max_digits = 10, decimal_places = 3)
    unidade = models.IntegerField(u'Unidade de medida', choices = UNIDADES_MEDIDA, default = 1)
    imagem = models.ImageField(null=True, blank=True, upload_to='galeria')
    observacao = models.TextField(u'Observação', blank=True, null=True)

    def __unicode__(self):
        return self.nome



class Dia_funcionamento(models.Model):
    class Meta:
        verbose_name = "Dia de Funcionamento"
        verbose_name_plural = "Dias de Funcionamento"
        
    aberto = models.DateTimeField(unique = True)
    fechado = models.DateTimeField(null=True, blank=True, unique = True)
    
    evento = models.TextField(max_length=50, null=True, blank=True)
    
    def __unicode__(self):
        if str(self.evento).strip() != '':
            return self.evento
        else:
            return self.aberto.strftime('%d/%m/%Y - %H:%M')

class Venda(models.Model):
    #Quem abre o pedido (ex. garçon)
    usuario = models.ForeignKey(User, related_name = 'usuario_set')
    #Cliente do estabelecimento
    cliente = models.ForeignKey(User, related_name = 'cliente_set', null=True, blank=True)
    
    data_aberto = models.DateTimeField(u'Data de abertura')
    data_fechado = models.DateTimeField(u'Data de Fechamento', null = True, blank = True)
    
    total = models.DecimalField(u'Preço Total', max_digits=10, decimal_places=2, default = 0.0)
    
    def __unicode__(self):
        return ('Venda %d' % self.id)

class Item(models.Model):
    class Meta:
        verbose_name_plural = "Itens"

    venda = models.ForeignKey(Venda)
    produto = models.ForeignKey(Produto)
    quantidade = models.DecimalField(u'Quantidade', max_digits = 10, decimal_places = 3)
    estado = models.IntegerField(default=1, choices = ESTADO)
    usuario = models.ForeignKey(User)
    data = models.DateTimeField(u'Horário do pedido')
    observacao = models.TextField('Observação', blank=True, null=True, default = '')

class Evento(models.Model):
    usuario = models.ForeignKey(User)
    instante = models.DateTimeField()
    descricao = models.TextField()

    def __unicode__(self):
        # return "Evento " + str(self.id)
        return self.data.strftime('%d/%m/%Y - %H:%M') + ' - ' + self.usuario.username + ', ' + ' - ' + self.descricao
